03 分支创建与合并
分支的概念
Git分支 = 一棵树上的 “分叉树枝” 。
一颗“代码树“ ,树干就是主分支(main或master),每次提交代码就像在树干上”结果“(记录一次变更)。
分支就像从树干上分叉出的新树枝,可以在新树枝上单独干活,开发新功能,不影响树干(主分支)的生长。
创建分支
通过以下命令查看当前存在哪些分支
git branch
默认情况下是存在一个master分支或者main分支的,至于是master还是main主要看你安装Git时勾选的哪个选项。一般情况下main分支是正式版本的更新,其他分支是在开发中频繁使用的。main分支,代码树中的主干部分,默认下、最稳定、最纯净的一个分支。
使用以下命令创建新分支
git branch 分支名称
git branch dev
git branch
可以看到当前存在了两个分支,一个main,一个dev分支。
创建一个Hello目录,在该目录下创建一个main.txt文本文件,写一些内容保存.
git add --all # 暂存目录下所有文件
git commit -m "add:modify on main branch"
git log --oneline --graph --all
以上操作做完之后,可以发现提交日志中,创建了dev分支,这个分支是基于主分支当前状态下创建的,并且之后又在主分支上进行了暂存修改提交的操作,但是并不影响dev分支。

检出 切换分支
以下命令是检出(翻译过来)切换分支的命令
git checkout dev
切换到dev分支后,可以看到之前在main分支修改前创建的Hello目录和main.txt文件,在dev分支下面并没有。这足以说明dev分支是在main分支当前那个状态下创建的。
在项目根目录下修改Hello.txt文件内容,暂存,提交,查看日志,重复这个步骤。
查看提交记录的日志

从日志看出,在第四次提交记录出现了分叉:
main 分支在第四次提交记录基础上创建了 Hello 目录和 Hello 目录下的 main.txt 添加了内容。
dev 分支在 main 分支提交过后 切换到了dev分支,并在第四次提交记录基础上修改了根目录下Hello.txt 文件,暂存提交。
两者互不影响。
合并分支
开出多个分支进行独立工作,最后当然要和在一起啦。
现在切换回主分支,并且修改Hello.txt文件的内容,这样做是为了和dev分支制造差异,制造一个合并的冲突。
git checkout main
修改Hello.txt文件的内容
git add --all
git commit -m "modify:修改主分支Hello文本内容"
现在开始合并两个分支的内容
git merge 想要合并的另一个分支名称
git merge dev
现在的情况是:main分支下Hello目录中新增的文本文件自动被合并了,但是呢?根目录下的文本文件存在冲突,也就是说主分支和dev分支这个文本中的相同位置存在差异,HEAD就是指当前分支。

也可以使用 git diff 命令查看冲突情况。
如何解决冲突:
- 一种是可以全部保留,手动把两部分内容全部保留下来,删掉
<<<<<HEAD 和>>>>> dev这两行。 - 一种是删掉其中一个,比如说删掉dev分支的内容。
解决步骤
- 查看冲突文件
git status
输出的意思是说:
你还有未合并的文件路径。
修复冲突 并且执行 git commit
使用 git merge --abort 放弃合并 恢复到合并前的状态
未合并的路径为:
使用git add 文件名 标记以下解决方案
查看未合并的文件(标记为 "both modified" 或 "unmerged")

- 手动编辑冲突文件
打开Hello.txt,删除 >>>>>HEAD ======== <<<<<<<<dev 这些标记,保留想要保留的内容。

- 标记冲突已解决
编辑完后,使用命令 git add 告诉git已经解决了冲突。
git add Hello.txt
- 提交合并结果
git commit -m "fix:合并dev分支 修复冲突 全部保留"
- 查看合并历史
git log --graph --oneline --all # 可视化分支合并历史

可以看到dev分支已经合并到main分支上,并且形成了一个新的提交记录。
其实在这个步骤中我犯了一个错误,跳过了中间的 git add 标记解决方案的步骤。
所以冲突解决的流程就是:git merge 合并分支 ---> 手动编辑文件决定保留哪些内容 ---> git add 标记已解决 ---> git commit 提交合并请求并形成一个新的提交记录。